package game.ai;

import game.ai.scene.IScene;
import game.ai.scene.SceneObject;
import game.entity.Hero;

import java.util.Collection;

import lion.message.MyResponseMsg;

public interface IEyeShotManager {
	/**
	 * 是否在我的视野中
	 * 
	 * @param object
	 * @return
	 */
	public boolean isContains(SceneObject other);

	/**
	 * 向我的视野发送消息(包含视野主人)
	 * 
	 * @param msg
	 */
	public void sendMsg(MyResponseMsg msg);

	/**
	 * 向我的视野发送消息但排除某人
	 * 
	 * @param msg
	 * @param exclude
	 */
	public void sendMsg(MyResponseMsg msg, Hero exclude);

	/**
	 * 初始化我的视野，同时把我加入到其他人的视野
	 */
	public void onEnterScene(IScene scene, boolean broadcastToOther);

	/**
	 * 当我自己离开场景
	 * 
	 * @param scene
	 */
	public void onLeaveScene(IScene scene);

	/**
	 * 当我移动时
	 */
	public void onMove();

	/**
	 * 根据 对应的class获得对象结合
	 */
	public <T> Collection<T> getEyeShotObjs(byte sceneObjType);

	/**
	 * 根据 对应的class,id获得对象结合
	 * 
	 * @param <T>
	 * @param clazz
	 * @param id
	 * @return 对象object
	 */
	public <T> T getEyeShotObjs(byte clazz, int id);

	/***
	 * 添加到我的视野中
	 * 
	 * @param obj
	 * @param msg
	 */
	public void addInMyEyeShot(SceneObject obj, boolean msg);

	/***
	 * 从我的视野中移除
	 * 
	 * @param obj
	 */
	public void removeFromMyEyeShot(SceneObject obj);

	/**
	 * 是否在我的视野中
	 * 
	 * @param point
	 * @return
	 */
	public boolean testIsInMyEyeShot(short[] point);

	/**
	 * 获取所有对象的数量
	 * 
	 * @return
	 */
	public int getObjCount();
	
	public Collection<SceneObject> getAllObjs();
}
